![Alexa Skills Kit for Node.js 次の一歩(DynamoDB)](https://devio2023-media.developers.io/wp-content/uploads/2015/08/alexa_skills_kit.png)
Alexa Skills Kit for Node.js 次の一歩(DynamoDB)
この記事は、2018/01/06 日本語対応も含め、最新版にリメイクされました。是非、こちらをご参照下さい。
1 はじめに
Alexa Skills Kit for Node.js (以下、Alexa SDK) は、Amazon のAlexaチームによって作成されたスキル作成用のSDKです。
前回、このSDKの入門として、下記の記事を書きました。
Alexa Skills Kit for Node.js はじめの一歩
今回は、この続きとして、Alexa SDKによるデータの永続化について見ていきたいと思います。 このSDKに触れるのが初めての方は、是非、上記も併せてご覧下さい。
2 DynamoDB
Alexa SDKでは、データの永続化のために、DynamoDBが軽易に利用可能になっています。 DynamoDBを利用するために必要な作業は、以下の2つだけです。
- テーブル名の指定
- パーミッションの追加
(1) テーブル名の指定
DynamoDBを使用する場合は、dynamoDBTableNameにテーブル名を設定します。
alexa.dynamoDBTableName = 'MySkillSampleTable';
(2) パーミッションの追加
上記のようにテーブル名を指定した時点で、DynamoDBの操作権限が無いと、Lambdaは、下記のようにエラーとなってしまいます。
arn:aws:sts::xxxxx/MySkillSample_hello is not authorized to perform: dynamodb:GetItem on resource: arn:aws:dynamodb:xxxxxxx:table/MySkillSampleTable"
DynamoDBにアクセスできるように必要なパーミッションを追加して下さい。
再びLambdaを実行すると、userIdがキーとなった、テーブルが生成されていることを確認できます。
(3) データの保存
続いて、DBを使用してデータを保存するコードを書いてみます。 counterというキーに数値を保存して、実行される度にインクリメントしています。
var handlers = { 'Unhandled': function () { var kCounter = "counter"; var counter = this.attributes[kCounter]; if (counter === undefined) { counter = 0 } this.attributes[kCounter] = counter + 1; this.emit(':tell', 'The counter is ${counter}'); } };
開発者ポータルから実行してみると、呼び出す度にカウンターが増えることを確認できます。 レスポンスをみると分かりますが、sessionAttributes にも、同時に書き込まれているようです。
DynamoDBの方を確認してみても、値が保存されていることが分かります。なお、ここでキーとなっている userId は、スキルを使用しているユーザ(Amazonアカウント)から生成された識別子になっているため、同じアカウントで使用した場合に、前回のデータが利用可能となります。
(4) 様々な型のデータ保存
利用できるデータ型はNUMBERのみではありません。
this.attributes["message"] = 'value'; this.attributes["flg"] = true; this.attributes["list"] = ['foo', 'bar', 'baz'];
マップ型も保存が可能であるため、JSONオブジェクトもそのまま保存できます。
var obj = { Day: "Monday", UnreadEmails: 42, ItemsOnMyDesk: [ "Coffee Cup", "Telephone", { Pens: { Quantity : 3}, Pencils: { Quantity : 2}, Erasers: { Quantity : 1} } ] }; this.attributes["obj"] = obj;
3 最後に
今回は、Alexa SDKによる、DynamoDBを利用したデータの永続化について紹介させて頂きました。
アカウント毎のデータ保存用として最適化されているため、スキル開発者は、ユーザ固有の情報を保存するという意味であれば、何も意識することなく非常に簡単に使用できると思います。
4 参考リンク
Announcing the Alexa Skills Kit for Node.js
GitHub https://github.com/alexa/alexa-skills-kit-sdk-for-nodejs
Alexa Skills Kit for Node.js はじめの一歩